package _0_object_oriented;


import org.junit.Test;

/**
 * @author bpzj 2019/11/11 14:55
 */
public class Son extends Father {
    public String name;
    public int age;
    public String fatherDontHave;

    public Son() {
        System.out.println("执行子类的构造器");
        this.name = "son";
        this.age = 11;
    }

    /**
     * 父类和子类都有 name 属性，在子类中 "重新赋值"，调用时返回的是父类的值
     */
    @Test
    public void 使用父类声明子类构造方法创建对象(){
        System.out.println("测试子类初始化, 会不会调用父类构造器");
        Father son = new Son();
        // 使用 父类 声名， 使用子类构造方法 实例化，会打印出 父类的属性值
        System.out.println(son.name);
        System.out.println(son.age);
        // System.out.println(son.fatherDontHave);
        System.out.println(son.getName());

        Son son1 = (Son)  son;
        System.out.println(son.name);
    }

    public static void main(String[] args) {
        Son son1 = new Son();
        System.out.println(son1.name);
        System.out.println(son1.age);
    }
}

